package com.zhixi.pattern.important.factorymethod.multiplefactorypattern;

import com.zhixi.pattern.important.factorymethod.multiplefactorypattern.operation.abstracthumanfactory.BlackHumanFactory;
import com.zhixi.pattern.important.factorymethod.multiplefactorypattern.operation.abstracthumanfactory.WhiteHumanFactory;
import com.zhixi.pattern.important.factorymethod.multiplefactorypattern.operation.abstracthumanfactory.YellowHumanFactory;
import com.zhixi.pattern.important.factorymethod.multiplefactorypattern.operation.humanfactory.Human;

/**
 * 多个工厂模式
 *
 * 由简单工厂模式的升级版
 * 一个抽象类（AbstractHumanFactory），多个工厂（BlackHumanFactory、WhiteHumanFactory、YellowHumanFactory）
 * 一个接口（Human），多个扩展（需要创建的对象就继承这个接口）
 * 一个扩展类（继承Human的接口就是扩展类）对应一个工厂，每个工厂负责创建自己的对象
 *
 * 如果项目比较复杂，初始化一个对象很费精力，所有产品都放到一个工厂方法中初始化
 * 会使代码结构不清晰
 *
 * 优点：封装性，扩展性
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/15 10:38
 */
public class MultipleFactoryPattern {

    public static void main(String[] args) {
        // 小黑人
        Human BlackHuman = new BlackHumanFactory().createHuman();
        BlackHuman.getColor();
        // 小黄人
        Human yellowHuman = new YellowHumanFactory().createHuman();
        yellowHuman.getColor();
        // 小白人
        Human whiteHuman = new WhiteHumanFactory().createHuman();
        whiteHuman.getColor();
    }

}
